package org.algorithm.熊猫.数组.二月;

import com.sun.tools.javac.util.Assert;
import org.junit.Test;

import java.util.HashMap;

/**
 * <p>
 * 给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target  的那 两个 整数，并返回它们的数组下标。
 * 你可以假设每种输入只会对应一个答案。但是，数组中同一个元素在答案里不能重复出现。
 * <p>
 * 你可以按任意顺序返回答案。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/two-sum
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * 数组：想尽办法发挥数组索引优势。
 */
public class 两数之和 {

    @Test
    public void test(){
        int[] param = new int[]{3, 2, 4};
        int target = 6;
        int[] ints = twoSum1(param, target);
        Assert.check(ints[0]==0 && ints[1]==2);
    }
    public static int[] twoSum1(int[] nums, int target) {
        HashMap<Integer, Integer> tempMap = new HashMap<>();
        int[] result = new int[2];
        for (int i = 0; i < nums.length; i++) {
            if (tempMap.containsKey(target - nums[i])) {
                result[0] = i;
                result[1] = tempMap.get(target - nums[i]);
                return result;
            }
            tempMap.put(nums[i], i);

        }
        return result;

    }

}
